/**
 * 应用配置文件
 */

// 加载环境变量
require('dotenv').config();

// 配置对象
const config = {
  // 服务器配置
  port: process.env.PORT || 3000, // 向后兼容
  nodeEnv: process.env.NODE_ENV || 'development',
  
  // 服务器详细配置
  server: {
    port: process.env.PORT || 3000,
    wsPort: process.env.WS_PORT || 9000,
    env: process.env.NODE_ENV || 'development',
  },
  
  // API配置
  apiPrefix: process.env.API_PREFIX || '/api',
  
  // 腾讯云API配置
  tencentCloud: {
    secretId: process.env.TENCENT_SECRET_ID,
    secretKey: process.env.TENCENT_SECRET_KEY,
    region: process.env.TENCENT_REGION || 'ap-guangzhou',
  },
  
  // 语音识别配置
  asr: {
    engineType: process.env.ASR_ENGINE_TYPE || '16k_zh',
  },
  
  // 文本转语音配置
  tts: {
    voiceType: parseInt(process.env.TTS_VOICE_TYPE || 0),
    volume: parseInt(process.env.TTS_VOLUME || 5),
    speed: parseInt(process.env.TTS_SPEED || 0),
    projectId: parseInt(process.env.TTS_PROJECT_ID || 0),
    modelType: parseInt(process.env.TTS_MODEL_TYPE || 1),
  },
  
  // 天气API配置
  weather: {
    apiKey: process.env.WEATHER_API_KEY,
    baseUrl: process.env.WEATHER_API_URL || 'https://api.openweathermap.org/data/2.5',
    units: process.env.WEATHER_UNITS || 'metric', // 公制单位
    lang: process.env.WEATHER_LANG || 'zh_cn', // 中文
  },
  
  // 日志配置
  logger: {
    level: process.env.LOG_LEVEL || 'info',
  },
  
  // 数据文件路径
  dataFiles: {
    chat: process.env.CHAT_DATA_FILE || 'data/chat.json',
    family: process.env.FAMILY_DATA_FILE || 'data/family.json',
    weather: process.env.WEATHER_DATA_FILE || 'data/weather.json',
  },
  
  // CORS配置
  cors: {
    origin: process.env.CORS_ORIGIN || '*',
    methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
    allowedHeaders: ['Content-Type', 'Authorization'],
  },
  
  // 上传文件配置
  upload: {
    maxSize: parseInt(process.env.UPLOAD_MAX_SIZE || 10) * 1024 * 1024, // 默认10MB
    allowedTypes: [
      // 图片
      'image/jpeg', 'image/png', 'image/gif', 'image/webp',
      // 音频
      'audio/mpeg', 'audio/mp4', 'audio/wav', 'audio/webm', 'audio/ogg',
      // 通用二进制
      'application/octet-stream'
    ],
  },
};

// 根据环境变量调整配置
if (config.nodeEnv === 'production') {
  // 生产环境特定配置
  config.logger.level = 'warn';
} else if (config.nodeEnv === 'test') {
  // 测试环境特定配置
  config.port = 3001;
  config.dataFiles = {
    chat: 'data/test/chat.json',
    family: 'data/test/family.json',
    weather: 'data/test/weather.json',
  };
}

module.exports = config;